package org.spring.aop;

import org.aopalliance.aop.Advice;

/**
 * 基本接口包含 AOP <b>advice<b>（在连接点采取的操作）和确定建议适用性的过滤器（例如切入点）。
 * <i>这个接口不是供 Spring 用户使用的，而是为了支持不同类型的建议的通用性。<i>
 * <p>
 * Spring AOP 基于 <b>around advice<b> 通过方法 <b>interception<b> 传递，符合 AOP 联盟拦截 API。
 * Advisor 接口允许支持不同类型的通知，例如 <b>before<b> 和 <b>after<b> 通知，它们不需要使用拦截来实现。
 *
 * @author 李坤
 * @date 2022/4/19 16:47
 */
public interface Advisor {

    /**
     * 如果尚未配置适当的建议，则从 {@link #getAdvice()} 返回空 {@code Advice} 的通用占位符。
     */
    Advice EMPTY_ADVICE = new Advice() {
    };

    /**
     * 返回此方面的建议部分。一个通知可以是一个拦截器、一个之前的通知、一个抛出的通知等。
     *
     * @return 如果切入点匹配，应该应用的建议
     *
     * @see org.aopalliance.intercept.MethodInterceptor
     * @see BeforeAdvice
     * @see AfterReturningAdvice
     */
    Advice getAdvice();

}
